package com.cloudlinkscm.base.authcenter.service;

import com.cloudlinkscm.base.authcenter.domain.RoleRelationTreeVO;
import com.cloudlinkscm.base.authcenter.model.Role;
import com.cloudlinkscm.base.authcenter.model.dto.RoleMoveDTO;
import com.cloudlinkscm.base.authcenter.model.dto.RoleSaveDTO;
import com.cloudlinkscm.base.authcenter.model.dto.TenantRoleSaveDTO;
import com.cloudlinkscm.base.authcenter.model.dto.TenantRoleUpdateDTO;

import java.util.List;

/**
 * Created by sin on 2017/8/8.
 *
 * 角色
 */
public interface RoleService {


	/**
	 * 角色：租户下的角色
	 *
	 * @param tenantId 租户 id
	 * @return 租户下的角色
	 */
	List<Role> list(String tenantId);

	/**
	 * 角色：保存
	 *
	 * @param saveDTO 需要保存的 role 信息
	 * @return 保存后的 角色
	 */
	Role save(TenantRoleSaveDTO saveDTO);

	/**
	 * 角色：更新
	 *
	 * @param updateDTO 需要更新的信息
	 * @return 更新受影响的条数
	 */
	int update(TenantRoleUpdateDTO updateDTO);

	/**
	 * 角色：激活
	 *
	 * @param id 角色 id
	 * @return 更新受影响的条数
	 */
	int active(String id);

	/**
	 * 角色：失效
	 *
	 * @param id 角色 id
	 * @return 更新受影响的条数
	 */
	int invalid(String id);

	/**
	 * 角色关系：relation 移动
	 *
	 * @param roleId 角色 id
	 * @param tenantId 租户 id
	 * @param moveDTO 需要移动的节点信息
	 * @return 更新受影响的条数
	 */
	int roleRelationMove(String roleId, String tenantId, RoleMoveDTO moveDTO);

	/**
	 * 角色关系：tree
	 *
	 * <p>
	 *     构建一个 {@link RoleRelationTreeVO}
	 *     返回两个属性，{@link RoleRelationTreeVO#distribution} 已分配资源
	 *     另一个，{@link RoleRelationTreeVO#notDistribution} 未分配资源
	 * </p>
	 *
	 * @param roleId 角色 id
	 * @return 构建的 tree
	 */
	RoleRelationTreeVO roleRelationTree(String roleId);

}
